#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "func.h"

/*COLOCA OS DADOS DO ARQUIVO DE CONFIGURACAO NUMA MATRIZ*/
int** matriz(char* file_name,char* sep)
{
  int **mat;
  char tam[11],tamaux[2];
  char *pri;
  char *sec;
  int i,j,a=0,b=0,c=0,x=0,enu1=0,enu2=0;
  long file_size;
  
  FILE *apt = fopen(file_name,"r");
  
  //coloca o cursor no final do arquivo
  fseek(apt, 0, SEEK_END);

        //le o numero de bytes ate o final do arquivo   
  file_size = ftell(apt)+1;

  //coloca o cursor no comeco do arquivo
        fseek (apt, 0, SEEK_SET);

  //vetor com tamanho total de bytes do arquivo de config  
  pri = (char*)malloc(sizeof(char)*(file_size));

  //pega o numero de linhas e colunas do arquivo de config
  fgets(tam,100,apt);
  tam[11]='\0';
  
  // pega o numero de linhas dado no arquivo de config
	while(tam[enu1] != ' ' && tam[enu1] != '|'){
		tamaux[enu1]=tam[enu1];
		enu1++;
	}
  tamaux[enu1]='\0';
	
  //transforma o char numero de linhas para inteiro
  i = atoi(tamaux);

	//busca o |
	while(tam[enu1] != '|'){
		enu1++;
	}
	enu1++;

	// pega o numero de colunas
	while(tam[enu1] != ' ' && tam[enu1] != '\0'){
		tamaux[enu2]=tam[enu1];
		enu1++;
		enu2++;
	}
  tamaux[enu2]='\0';
	
  //transforma o char numero de colunas para inteiro
  j = atoi(tamaux);

  //malloc na matriz de inteiros
  mat = (int**)malloc(sizeof(int)*i);
  for(a=0;a<=i;a++)
  {
    mat[a] = (int*) malloc(sizeof(int)*j);
  }
	

  //insere na matriz de config
  for(a=0;a<i;a++)
  {
    //pega o valor no arkivo ateh achar o \n
    fgets(pri,file_size,apt);
    //encontra o lugar exato do \n e troca por \0
    while(pri[c]!='\n')
    {
      c++;
    }
    pri[c]='\0';
    c=0;
    
    //faz o primeiro strtok
    sec = strtok(pri,"|"); 
    sec = strtok(NULL,"|"); 
    //insere as linhas
    for(b=0;b<j-1;b++)
    {
      //transforma em inteiro o strtok
      x = atoi(sec);
      
      //insere na matriz
      mat[a][b] = x;
      
      //pega os proxs strtok
      sec = strtok(NULL,"|");  
    }
  }
	//prepara para pegar o separador
	fgets(pri,file_size,apt);
  fseek(apt,2,SEEK_CUR);
	
	//pega o separador
  fgets(pri,file_size,apt);
  while(pri[c]!='\n')
  {
    c++;
  }
  pri[c]='\0';
	
	//copia o separador para sep
	strcpy(sep,pri);

/*
  for(a=0;a<i;a++)
  {
    for(b=0;b<j-1;b++)
    {
      printf("%d ",mat[a][b]);
    }
    printf("\n");
  }
	printf("%c\n",*sep);
*/
  
  fclose(apt);
  return mat;
}

